#ifndef _MEMORY_DEVICE_INFO_H_
#define _MEMORY_DEVICE_INFO_H_
#include "types.h"
#include <string>

class MemoryDevice {
public:
    MemoryDevice(){}

private:
    // 2.1+
    UINT8       _length;
    UINT16      _totalWidth;
    UINT16      _dataWidth;
    UINT16      _size;
    UINT8       _formFactor;
    UINT8       _deviceSet;
    std::string _deviceLocator;
    std::string _bankLocator;
    UINT8       _memoryType;
    UINT16      _typeDetail;
    // 2.3+
    UINT16      _speed;
    std::string _manufacturer;
    std::string _serialNumber;
    std::string _assetTag;
    std::string _partNumber;
    // 2.6+
    UINT8       _attributes;
    // 2.7+
    UINT32      _extendedSize;
    UINT16      _configuredMemorySpeed;
    // 2.8+
    UINT16      _minVoltage;
    UINT16      _maxVoltage;    
    UINT16      _configuredVoltage;
    // 3.2+
    UINT8       _memoryTechnology;
    UINT16      _memoryOperatingModeCapability;
    std::string _firmwareVersion;
    UINT16      _moduleManufacturerID;
    UINT16      _moduleProductID;
    UINT16      _memSubControllerManufacturerID;
    UINT16      _memSubControllerProductID;
    UINT64      _noneVolatileSize;
    UINT64      _volatileSize;
    UINT64      _cacheSize;
    UINT64      _logicalSize;
};

#endif